package com.example.common_library.utils;

import android.text.TextUtils;

import java.math.BigDecimal;

/**
 * @Description 数字处理工具
 * @Author Jannonx
 * @Date 2021/8/17 17:30
 */
public class NumberUtils {


    /**
     * 保留两位有效小数
     *
     * @param fPrice
     * @return
     */
    public static String parse(String fPrice) {
        return parse(fPrice, 2);
    }

    /**
     * 保留两位有效小数
     *
     * @param dPrice double
     * @return
     */
    public static String parse(double dPrice) {
        String fPrice = String.valueOf(dPrice);
        return parse(fPrice);
    }

    /**
     * 保留两位有效小数
     *
     * @param number BigDecimal
     * @return
     */
    public static String parse(BigDecimal number) {
        if (number == null) {
            number = new BigDecimal("0");
        }
        return parse(number.toString());
    }

    /**
     * 保留两位有效小数
     *
     * @param fPrice    原始数
     * @param keepDigit 保留的小数位
     * @return
     */
    public static String parse(String fPrice, int keepDigit) {
        if (TextUtils.isEmpty(fPrice) || fPrice == null || "".equals(fPrice)) {
            fPrice = "0";
        }
        BigDecimal bigDecimal = new BigDecimal(fPrice);
        return bigDecimal.setScale(keepDigit, BigDecimal.ROUND_HALF_UP).toString();
    }

    /**
     * 格式化数字字符串
     */
    public static String getStr(String number) {
        if (TextUtils.isEmpty(number) || number == null || "".equals(number)) {
            number = "0";
        }
        BigDecimal bigDecimal = new BigDecimal(number);
        return bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
    }

    /**
     * 格式化数字字符串
     */
    public static double getDoubleStr(String number) {
        return Double.parseDouble(getStr(number));
    }

    public static String getParseNumberByDouble(double number) {
        BigDecimal bigDecimal = new BigDecimal(number + "");
        return bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
    }

    /**
     * 与0比较大小
     *
     * @param number 比较数
     * @return
     */
    public static int compare(String number) {
        return compare("0", number);
    }

    /**
     * 与0比较大小
     *
     * @param number 比较数
     * @return
     */
    public static int compare(double number) {
        return compare(0, number);
    }

    /**
     * 比较
     *
     * @param fPrice 被比较数
     * @param tPrice 比较数
     * @return
     */
    public static int compare(double fPrice, double tPrice) {
        return compare(String.valueOf(fPrice), String.valueOf(tPrice));
    }

    /**
     * 比较
     *
     * @param fPrice 被比较数
     * @param tPrice 比较数
     * @return 大于0，第二个数比第一个数大
     * @return 等于0，第二个数等于第一个数
     * @return 小于0，第二个数小于第一个数
     */
    public static int compare(String fPrice, String tPrice) {
        if (TextUtils.isEmpty(fPrice) || fPrice == null || "".equals(fPrice)) {
            fPrice = "0";
        }
        if (TextUtils.isEmpty(tPrice) || tPrice == null || "".equals(tPrice)) {
            tPrice = "0";
        }
        BigDecimal fPriceDecimal = new BigDecimal(fPrice);
        BigDecimal tPriceDecimal = new BigDecimal(tPrice);
        return tPriceDecimal.compareTo(fPriceDecimal);
    }


    /**
     * 相减
     *
     * @param fPrice 被减数
     * @param tPrice 减数
     * @return 余数，四舍五入
     */
    public static String sub(double fPrice, double tPrice) {
        return sub(String.valueOf(fPrice), String.valueOf(tPrice));
    }

    /**
     * 相减
     *
     * @param fPrice 被减数
     * @param tPrice 减数
     * @return 余数，四舍五入
     */
    public static String sub(String fPrice, String tPrice) {
        if (TextUtils.isEmpty(fPrice) || fPrice == null || "".equals(fPrice)) {
            fPrice = "0";
        }
        if (TextUtils.isEmpty(tPrice) || tPrice == null || "".equals(tPrice)) {
            tPrice = "0";
        }
        BigDecimal fDecimal = new BigDecimal(fPrice);
        BigDecimal tDecimal = new BigDecimal(tPrice);
        BigDecimal subDecimal = fDecimal.subtract(tDecimal);
        return subDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
    }

    /**
     * 相减
     *
     * @param dfPrice 被减数
     * @param dtPrice 减数
     * @return 余数，四舍五入
     */
    public static double subToDouble(double dfPrice, double dtPrice) {
        String fPrice = dfPrice + "";
        String tPrice = dtPrice + "";
        if (TextUtils.isEmpty(fPrice) || "".equals(fPrice)) {
            fPrice = "0";
        }
        if (TextUtils.isEmpty(tPrice) || "".equals(tPrice)) {
            tPrice = "0";
        }
        BigDecimal fDecimal = new BigDecimal(fPrice);
        BigDecimal tDecimal = new BigDecimal(tPrice);
        BigDecimal subDecimal = fDecimal.subtract(tDecimal);
        String str = subDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
        return Double.parseDouble(str);
    }

    /**
     * 除法
     *
     * @param fPrice 被除数
     * @param tPrice 除数
     * @return 四舍五入的商
     */
    public static String divide(String fPrice, String tPrice) {
        if (TextUtils.isEmpty(fPrice) || fPrice == null || "".equals(fPrice)) {
            fPrice = "0";
        }
        if (TextUtils.isEmpty(tPrice) || tPrice == null || "".equals(tPrice)) {
            tPrice = "0";
        }

        BigDecimal zeroDecimal = new BigDecimal(0);
        BigDecimal numberDecimal = new BigDecimal(tPrice);
        if (numberDecimal.compareTo(zeroDecimal) == 0) {
            return "0";
        }

        BigDecimal fDecimal = new BigDecimal(fPrice);
        BigDecimal tDecimal = new BigDecimal(tPrice);
        BigDecimal multiply = fDecimal.divide(tDecimal);
        return multiply.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
    }

    /**
     * 加法
     *
     * @param dFPrice double
     * @param dTPrice double
     * @return 四舍五入的和
     */
    public static double add(double dFPrice, double dTPrice) {
        String fPrice = String.valueOf(dFPrice);
        String tPrice = String.valueOf(dTPrice);
        String addStr = add(fPrice, tPrice);
        return Double.parseDouble(addStr);
    }

    /**
     * 加法
     *
     * @param fPrice String
     * @param tPrice String
     * @return 四舍五入的和
     */
    public static String add(String fPrice, String tPrice) {
        if (TextUtils.isEmpty(fPrice) || fPrice == null || "".equals(fPrice)) {
            fPrice = "0";
        }
        if (TextUtils.isEmpty(fPrice) || tPrice == null || "".equals(tPrice)) {
            tPrice = "0";
        }
        BigDecimal fDecimal = new BigDecimal(fPrice);
        BigDecimal tDecimal = new BigDecimal(tPrice);
        BigDecimal multiply = fDecimal.add(tDecimal);
        return multiply.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
    }

    /**
     * 加法
     *
     * @param fPrice String
     * @param tPrice String
     * @return 四舍五入的和
     */
    public static String add(String fPrice, String tPrice,int scale) {
        if (TextUtils.isEmpty(fPrice) || fPrice == null || "".equals(fPrice)) {
            fPrice = "0";
        }
        if (TextUtils.isEmpty(fPrice) || tPrice == null || "".equals(tPrice)) {
            tPrice = "0";
        }
        BigDecimal fDecimal = new BigDecimal(fPrice);
        BigDecimal tDecimal = new BigDecimal(tPrice);
        BigDecimal multiply = fDecimal.add(tDecimal);
        return multiply.setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
    }

    /**
     * 加法
     *
     * @param fPrice String
     * @param tPrice String
     * @return 四舍五入的和
     */
    public static BigDecimal addGetDecimal(String fPrice, String tPrice) {
        String add = add(fPrice, tPrice);
        return new BigDecimal(add);
    }

    /**
     * 加法
     *
     * @param fPrice String
     * @param tPrice String
     * @return 四舍五入的和
     */
    public static BigDecimal add(BigDecimal fPrice, BigDecimal tPrice) {
        return fPrice.add(tPrice);
    }


    /**
     * 乘法
     *
     * @param fPrice String
     * @param tPrice String
     * @return 四舍五入的积
     */
    public static String mul(String fPrice, String tPrice) {
        if (TextUtils.isEmpty(fPrice) || fPrice == null || "".equals(fPrice)) {
            fPrice = "0";
        }
        if (TextUtils.isEmpty(tPrice) || tPrice == null || "".equals(tPrice)) {
            tPrice = "0";
        }
        BigDecimal fDecimal = new BigDecimal(fPrice);
        BigDecimal tDecimal = new BigDecimal(tPrice);
        BigDecimal multiply = fDecimal.multiply(tDecimal);
        return multiply.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
    }
    public static String mul(String fPrice, String tPrice,int scale) {
        if (TextUtils.isEmpty(fPrice) || fPrice == null || "".equals(fPrice)) {
            fPrice = "0";
        }
        if (TextUtils.isEmpty(tPrice) || tPrice == null || "".equals(tPrice)) {
            tPrice = "0";
        }
        BigDecimal fDecimal = new BigDecimal(fPrice);
        BigDecimal tDecimal = new BigDecimal(tPrice);
        BigDecimal multiply = fDecimal.multiply(tDecimal);
        return multiply.setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
    }
    /**
     * 乘法
     *
     * @param fPrice String
     * @param dPrice double
     * @return 四舍五入的积
     */
    public static String mul(String fPrice, double dPrice) {
        String tPrice = String.valueOf(dPrice);
        return mul(fPrice, tPrice);
    }

    /**
     * 乘法
     *
     * @param fPrice double
     * @param tPrice double
     * @return 四舍五入的积
     */
    public static double mul(double fPrice, double tPrice) {
        String parseNumber = mul(fPrice + "", tPrice + "");
        return Double.parseDouble(parseNumber);

    }

    /**
     * 两个精度类型数字乘法,舍去第三位小数
     */
    public static String mulDown(String fPrice, String tPrice) {
        if (TextUtils.isEmpty(fPrice) || fPrice == null || "".equals(fPrice)) {
            fPrice = "0";
        }
        if (TextUtils.isEmpty(tPrice) || tPrice == null || "".equals(tPrice)) {
            tPrice = "0";
        }
        BigDecimal fDecimal = new BigDecimal(fPrice);
        BigDecimal tDecimal = new BigDecimal(tPrice);
        BigDecimal multiply = fDecimal.multiply(tDecimal);
        return multiply.setScale(2, BigDecimal.ROUND_HALF_DOWN).toString();
    }

    /**
     * 四舍五入取整
     *
     * @param number 双精度
     * @return
     */
    public static String getIntByStr(String number) {
        if (TextUtils.isEmpty(number) || "".equals(number) || number == null) {
            number = "0";
        }
        BigDecimal bigDecimal = new BigDecimal(number);
        return bigDecimal.setScale(0, BigDecimal.ROUND_HALF_UP).toString();
    }

    /**
     * 格式化金额(单位为int,转成保留两个小数)
     *
     * @param number
     * @return
     */
    public static String parseCentsByTwo(int number) {
        return parseCents(number, 2);
    }

    /**
     * 格式化金额(单位为int,转成保留两个小数)
     *
     * @param number
     * @return
     */
    public static String parseCents(int number, int keepDigital) {
        double strNumber = number / Math.pow(10.0, keepDigital);
        return getParseNumberByDouble(strNumber);
    }


}
